/Users/csian/Desktop/CP/git_hub/080223/ch13/cat_dog_images
tf.io & tf.image
tf.io를 통해서 이미지 파일을 읽고, tf.image를 통해 이미지 콘텐츠를 디코딩하고 이미지 크기를 바꾼다.
import pathlib
imgdir_path=pathlib.Path('/Users/csian/Desktop/CP/git_hub/080223/ch13/cat_dog_images')
file_list=sorted([str(path) for path in imgdir_path.glob('*.jpg')])
['/Users/csian/Desktop/CP/git_hub/080223/ch13/cat_dog_images/cat-01.jpg', '/Users/csian/Desktop/CP/git_hub/080223/ch13/cat_dog_images/cat-02.jpg', '/Users/csian/Desktop/CP/git_hub/080223/ch13/cat_dog_images/cat-03.jpg', '/Users/csian/Desktop/CP/git_hub/080223/ch13/cat_dog_images/dog-01.jpg', '/Users/csian/Desktop/CP/git_hub/080223/ch13/cat_dog_images/dog-02.jpg', '/Users/csian/Desktop/CP/git_hub/080223/ch13/cat_dog_images/dog-03.jpg’]z
import matplotlib.pyplot as plt
import os
fig=plt.figure(figsize=(10, 5))
for i, file in enumerate(file_list):
img_raw=tf.io.read_file(file)
img=tf.image.decode_image(img_raw)
print('이미지 크기:', img.shape)
ax=fig.add_subplot(2, 3, i+1)
ax.set_xticks([]); ax.set_yticks([])
ax.imshow(img)
ax.set_title(os.path.basename(file), size=15)
plt.tight_layout()
plt.show()
이미지 크기: (900, 1200, 3)
이미지 크기: (900, 1200, 3)
이미지 크기: (900, 742, 3)
이미지 크기: (800, 1200, 3)
이미지 크기: (800, 1200, 3)
이미지 크기: (900, 1200, 3)
이미지의 가로 세로 길이가 일정하지 않다(가로, 세로 비율이 다름)
나중에 이미지를 전처리하여 동일한 크기로 만들어야 한다.
레이블은 파일 이름의 강아지와 고양이로 분류
labels=[1 if 'dog' in os.path.basename(file) else 0 for file in file_list]
print(labels)
레이블과 특성을 하나의 텐서로 만들기
ds_files_labels=tf.data.Dataset.from_tensor_slices((file_list, labels))
for item in ds_files_labels:
print(item[0].numpy(), item[1].numpy())
b'/Users/csian/Desktop/CP/git_hub/080223/ch13/cat_dog_images/cat-01.jpg' 0
b'/Users/csian/Desktop/CP/git_hub/080223/ch13/cat_dog_images/cat-02.jpg' 0
b'/Users/csian/Desktop/CP/git_hub/080223/ch13/cat_dog_images/cat-03.jpg' 0
b'/Users/csian/Desktop/CP/git_hub/080223/ch13/cat_dog_images/dog-01.jpg' 1
b'/Users/csian/Desktop/CP/git_hub/080223/ch13/cat_dog_images/dog-02.jpg' 1
b'/Users/csian/Desktop/CP/git_hub/080223/ch13/cat_dog_images/dog-03.jpg' 1
.map 메서드를 이용하여 크기를 변경
def load_and_preprocess(path, label):
image=tf.io.read_file(path)
image=tf.image.decode_jpeg(image, channels=3)
image=tf.image.resize(image, [img_height, img_width])
image/=255.0
return image, label
img_width, img_height=120, 80
ds_images_labels=ds_files_labels.map(load_and_preprocess)
fig=plt.figure(figsize=(10, 6))
for i, example in enumerate(ds_images_labels):
ax=fig.add_subplot(2, 3, i+1)
ax.set_xticks([]); ax.set_yticks([])
ax.imshow(example[0])
ax.set_title('{}'.format(example[1].numpy()), size=15)
plt.tight_layout()
plt.show()